Correlação Linear
Alguns exemplos dessa aula foram inspirados no material da Profa. Livia Oushiro (IEL/Unicamp). Salve o link do curso dela na sua aba de favoritos, porque é um material muito bom!
Até o momento, vimos apenas variáveis independentes (ou explicativas) categóricas, como “método de ensino”, “sexo”, “estado” etc.
No entanto, às vezes acreditamos que há relação entre duas variáveis quantitativas.
Qual você acha que é a relação entre
Pergunta de Hinton(2004): o número de horas de estudo aumenta a nota da prova?
| Número de horas de estudo | aumenta | nota da prova |
|---|---|---|
| Variável preditora | sentido da correlação (positiva) | Variável resposta |
| Variável independente | sentido da correlação (positiva) | Variável dependente |
Vamos importar o conjunto de dados para ver a distribuição dos dados
dados.study <- read_excel("studyhours_exammarks.xlsx")Visualização dos dados: gráfico de correlação
O que há no eixo x e no eixo y? O que os pontos indicam?
Visualização dos dados: gráfico de correlação
O que essa linha faz?
Podemos dizer que as notas da prova não tem uma distribuição aleatória, mas mantém uma correlação positiva com as horas de estudo.
Quando isso ocorre, dizemos que os pontos cairiam todos sobre uma linha se não fosse por algumas variações aleatórias (cf. próximo slide).
Quando os pontos caem todos mais ou menos nessa linha ou ao redor dela, é possível dizer que a variável do eixo x PREDIZ o comportamento da variável no eixo y.
Qual seria, aproximadamente, a nota de uma pessoa que estudou 60 horas?
Os pontos brancos indicam o valor previsto pela linha; os pontos pretos os valores observados. As retas que ligam valor observado e previsto indicam o valor residual entre observação e valor previsto.
Esse gráfico mostra a relação entre largura e comprimento de sépalas em plantas. Você diria que há correlação?
Não podemos definir se há ou não correlação simplesmente pelo olhômetro. Fazemos um teste de correlação com o comando abaixo:
#cor.test(VARIÁVEL_1, VARIÁVEL_2)No caso do conjunto de dados dados.study, preenchemos a sintaxe da seguinte maneira:
cor.test(dados.study$mark, dados.study$study.time)##
## Pearson's product-moment correlation
##
## data: dados.study$mark and dados.study$study.time
## t = 2.9405, df = 8, p-value = 0.01869
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## 0.1667531 0.9288464
## sample estimates:
## cor
## 0.7207104
O que te parece familiar no output e o que você ainda não conhece?
##
## Pearson's product-moment correlation
##
## data: dados.study$mark and dados.study$study.time
## t = 2.9405, df = 8, p-value = 0.01869
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## 0.1667531 0.9288464
## sample estimates:
## cor
## 0.7207104
Você já conhece o que significa um teste-t e df (ou graus de liberdade).
Você já ouviu falar de intervalo de confiança.
O que é cor e o que ele nos diz na prática sobre o teste feito?
Para fins práticos, saiba que o coeficiente da correlação (r) é um número que vai de -1 a 1 e indica a força e direção da correlação entre as duas variáveis.
Fonte: http://www.dummies.com/education/math/statistics/how-to-interpret-a-correlation-coefficient-r/
Assim como para a distribuição t e F, a distribuição r também depende dos seus graus de liberdade, como vemos no gráfico de Hinton (2004, p.269).
No caso da distribuição r, os graus de liberdade são iguais ao número de pares (no nosso caso, 10) menos 2
(n-2)*.
*Não entraremos nos detalhes matemáticos, mas a ideia é mais ou menos a seguinte: o valor de \(r\) é o coeficiente ângular da reta que melhor se ajusta aos valores observados. Para traçar uma reta, precisamos ao menos de dois pontos)
A essa altura, você já está bastante familiarizado com o conjunto de dados Covariaveis.csv.
Você acha que a taxa de produção de concordância nominal (CN) não padrão correlaciona-se com a taxa de concordância verbal de 3a pessoa não padrão (CV3PP)?
Importe o conjunto de dados (chame-o de cov) e veja se há correlação.
cov <- read.csv("Covariaveis.csv")cor.test(cov$CN, cov$CV3PP)##
## Pearson's product-moment correlation
##
## data: cov$CN and cov$CV3PP
## t = 12.133, df = 116, p-value < 2.2e-16
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## 0.6557324 0.8180272
## sample estimates:
## cor
## 0.7478493
Fomos um pouco apressados e esquecemos de fazer dois passos que devem ser feitos sempre que formos realizar um teste estatístico de correlação:
Checar a normalidade dos dados
Checar o gráfico de dispersão dos dados nas variáveis estudadas
A sintaxe básica do ggplot para definir eixos x e y é a seguinte:
ggplot(DATA, aes (x = PREDITORA, Y = RESPOSTA))Agora falta determinar que é um gráfico de disperção (geom_point)
ggplot(cov, aes (x = CN, y = CV3PP))+
geom_point()ggplot(cov, aes (x = CN, y = CV3PP))+
geom_point()Vamos só deixar o gráfico mais bonito e ajustar uma linha de regressão.
ggplot(cov, aes (x = CN, y = CV3PP))+
geom_point(size = 3, alpha = 0.5)+
geom_smooth(method = "lm", se = FALSE)+
theme_bw()Você acha que a distribuição dos dados é normal? Por quê?
Você já sabe que não pois os pontos estão mais concentrados nos valores mais baixos, mas um boxplot pode te mostrar isso também.
Gráficos de dispersão são necessários não só para ver normalidade dos dados (na verdade, para isso um boxplot é melhor), mas para ver se a distribuição faz sentido com o que se espera para um MODELO LINEAR.
O que se espera da distribuição dos dados para que eles possam ser tratados por meio de um MODELO LINEAR?
Vamos dar uma olhada na correlação desses três pares de valores (dino, away, dots)
cor.test(datasaurus_dozen_wide$dino_x, datasaurus_dozen_wide$dino_y)
cor.test(datasaurus_dozen_wide$away_x, datasaurus_dozen_wide$away_y)
cor.test(datasaurus_dozen_wide$dots_x, datasaurus_dozen_wide$dots_y)cor.test(datasaurus_dozen_wide$dino_x, datasaurus_dozen_wide$dino_y)##
## Pearson's product-moment correlation
##
## data: datasaurus_dozen_wide$dino_x and datasaurus_dozen_wide$dino_y
## t = -0.76443, df = 140, p-value = 0.4459
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## -0.2267905 0.1013316
## sample estimates:
## cor
## -0.06447185
cor.test(datasaurus_dozen_wide$away_x, datasaurus_dozen_wide$away_y)##
## Pearson's product-moment correlation
##
## data: datasaurus_dozen_wide$away_x and datasaurus_dozen_wide$away_y
## t = -0.76034, df = 140, p-value = 0.4483
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## -0.2264633 0.1016730
## sample estimates:
## cor
## -0.06412835
cor.test(datasaurus_dozen_wide$dots_x, datasaurus_dozen_wide$dots_y)##
## Pearson's product-moment correlation
##
## data: datasaurus_dozen_wide$dots_x and datasaurus_dozen_wide$dots_y
## t = -0.71527, df = 140, p-value = 0.4756
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## -0.2228536 0.1054338
## sample estimates:
## cor
## -0.06034144
Os valores são iguais. Vamos ver a distribuição dos dados.
Você também pode desenhar sua correlação!
Brinque um pouco aqui:
https://beta.observablehq.com/@tmcw/bring-your-own-doodles-linear-regression
Só faz sentido falar em correlação linear se, ao analisar o gráfico de dispersão, você tiver evidências de que faz sentido traçar uma reta (e não um dinossauro) para explicar a distribuição dos dados.
Lembre-se: o R faz contas, quem pensa é você!
Voltando aos dados da tabela Covariaveis.csv, vimos que a distribuição dos dados de CN e CV3PP não é normal, mas ainda assim é possível imaginar que uma linha explique sua distribuição.
Felizmente, há uma versão do teste de correlação para dados que não seguem uma distribuição normal, assim como há para o teste-t.
Veja que, no default, a função cor.test() te retorna um coeficiente de correlação de Pearson
cor.test(cov$CN, cov$CV3PP)##
## Pearson's product-moment correlation
##
## data: cov$CN and cov$CV3PP
## t = 12.133, df = 116, p-value < 2.2e-16
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
## 0.6557324 0.8180272
## sample estimates:
## cor
## 0.7478493
Para dados não normais, precisamos de um coeficiente de Spearman. É só especificar isso na sintaxe do código.
cor.test(cov$CN, cov$CV3PP, method = "spearman")## Warning in cor.test.default(cov$CN, cov$CV3PP, method = "spearman"): Cannot
## compute exact p-value with ties
##
## Spearman's rank correlation rho
##
## data: cov$CN and cov$CV3PP
## S = 66236, p-value < 2.2e-16
## alternative hypothesis: true rho is not equal to 0
## sample estimates:
## rho
## 0.7581044
Para todas as análises que você conduzir (não apenas para correlação), certifique-se de que você controlou a coleta ou análise pelas possíveis variáveis de confundimento.
Variáveis de confundimento são variáveis que você não controlou (portanto, não são variáveis independentes) e podem influenciar as medidas da sua variável dependente.
No caso das correlações, podemos perceber essa influência em gráficos de dispersão.
O gráfico abaixo mostra a relação entre largura e comprimento de sépalas de plantas. Você enxerga algum tipo de correlação? Qual?
Ajustando uma linha de regressão, vemos que não deve haver correlação, apesar da leve inclinação negativa (um teste de correlação poderia nos tirar a dúvida)
No entanto, há três tipos de flores analisadas. Vamos ajustar os gráficos considerando que a espécie da planta pode provocar diferenças de correlação.
Você vê alguma mudança no que detectamos anteriormente sobre as correlações?
Vamos ajustar a inclinação da linha de regressão por espécie.
Percebe-se que às vezes as correlações não nos dizem muito se não levarmos em conta possíveis variáveis de confundimento.
É possível, por exemplo, que um conjunto que pareça ter uma correlação positiva seja composto por pequenos conjuntos que mostram uma correlação negativa.
O gráfico abaixo mostra o efeito de ESCOLARIDADE na correlação.
Não houve mudança na direção da correlação. Se for do interesse de sua pesquisa, você pode testar as correlações desses dois grupos separadamente (lembre-se apenas de corrigir o seu p se decidir realizar múltiplos testes!)
Na nossa primeira análise, vimos que há correlação entre horas de estudo e nota na prova.
Podemos dizer que maiores notas de estudo causam maiores notas de prova?
Na nossa segunda análise, vimos que há correlação entre CN e CV3PP.
Podemos dizer que maiores taxas de CN causam maiores taxas de CV3PP?
Há uma frase famosa na estatística que diz “correlation does not imply causation”, ou “correlação não implica causa”.
Caso A
Fonte: F. de São Paulo
Há uma frase famosa na estatística que diz “correlation does not imply causation”, ou “correlação não implica causa”.
Caso B
Fonte: Gazeta do Povo
O fato de duas variáveis A e B estarem correlacionadas indica apenas isso. A interpretação sobre os motivos dessa correlação cabe aos pesquisadores.
É possível que haja uma relação causal entre A e B, mas uma simples correlação não diz se é o caso (um experimento subsequente pode ajudar: foi o que fizeram os pesquisadores do Caso B).
Lembre-se sempre de que os testes estatísticos são só testes. Quem os interpreta somos nós, e é preciso nos basearmos no bom senso e na literatura que conhecemos sobre a área.
Você conseguiria explicar essas correlações?
Fonte: https://xkcd.com/552/
Relembrando as variáveis de Covariaveis.csv
EN: taxa de ditongação de /e/ nasal ([~ej], como em “fazenda”) em oposição à monotongação [~e]
RT: taxa de /r/ em coda realizado como retroflexo em oposição ao tepe;
R0: taxa de apagamento de /r/ em coda em oposição à realização;
CN: taxa de concordância nominal não padrão (e.g., “as menina”) em oposição à variante padrão
CV3PP: taxa de concordância de 3a pes. do plural não padrão (e.g., “eles vai”) em oposição à variante padrão
CV1PP: taxa de concordância de 1a pes. do plural não padrão (e.g., “nós vai”) em oposição à variante padrão
A função pairs.cor() do pacote languageR permite realizar correlações múltiplas com um único comando. Não vamos rodar o código em aula, mas você pode instalar e carregar o pacote em casa.
#install.packages("languageR")
#library(languageR)Vamos especificar que queremos as correlações para todas as variáveis do slide anterior.
pairscor.fnc( ~ cov$EN + cov$RT + cov$R0 + cov$CN + cov$CV3PP + cov$CV1PP, hist = T, smooth = T)Veja os resultados
A profa. Livia Oushiro, que usa esse exemplo em seu curso, traz uma explicação do gráfico no slide anterior:
“A figura mostra, na linha diagonal, o histograma da distribuição das proporções das variantes acima indicadas. Vemos aí claramente que a maioria das variáveis não tem uma distribuição normal. Na parte inferior, a função calculou o r de Pearson e de Spearman, com os respectivos valores de significância, para cada par de variáveis – valores que se encontram no cruzamento das respectivas linhas. Na parte superior, visualizam-se os gráficos de dispersão com as linhas de regressão. Por conta do argumento smooth = T, as linhas não são retas, mas seguem mais fielmente as distribuições.”
(Oushiro, 2017)
Você consegue identificar correlações positivas e negativas? Você consegue explicá-las, ou acredita que algumas são espúrias?
Fazer análises de correlação entre todas as variáveis pode ser algo a ser feito em uma fase exploratória do seu estudo, mas lembre-se de que “correlação não implica causa”, e por isso seja cuidadoso ao tirar conclusões de correlações que não estavam previstas em sua análise inicial.
O conjunto de dados diamonds.csv tem uma coluna value com o valor de venda de 150 diamantes. Você acha que peso ou claridade contribuem para o valor de venda de um diamante?
Escolha um dos critérios e faça um teste de correlação com o valor de venda. Não se esqueça de, antes, fazer a inspeção visual dos dados.
Para fazer o teste de correlação, basta seguir a sintaxe abaixo. Lembre-se de usar method = "spearman" se seus dados não forem normais.
#cor.test(VARIÁVEL_1, VARIÁVEL_2)Você pode mudar muitos detalhes em um gráfico de correlação. Abaixo há um código com sugestões.
ggplot(DADOS, aes(x=Variável preditora, y=Variável resposta))+ # define os eixos x e y
geom_point(size = 3, color = "black")+ #define características das bolinhas
geom_smooth(method='lm', color = "lightgrey", se = FALSE)+ #define características da
#linha de regressão; o método
#'lm' indica uma linha reta;
# se = FALSE diz que você não
# quer a área do standard error
# associada a essa linha
labs(x= "Medida eixo x", y = "Medida eixo y")+ #Legenda do eixo x e y
theme_bw() #indica o tema; bw é um tema blck and white, o fundo do gráfico fica branco